1 Practical Statistics

Practical Statistics berisi kaidah statistika yang banyak diterapkan dalam praktik data science agar dapat memahami dan mengolah data dengan tepat. Secara umum, Practical Statistics terbagi 2, berdasarkan kegunaannya:

  • Descriptive Statistics: menggambarkan keadaan dari sebuah data yang kita miliki.
  • Inferential Statistics: menyimpulkan sesuatu tentang kondisi data populasi di lapangan, berdasarkan sampel data yang kita punya.

Berikut adalah mindmap dari Practical Statistics yang akan kita pelajari:

Untuk lebih memahami, mari kita melakukan analisis menggunakan data asli. # Study Case: Supermarket Analysis

1. Business Question

Pertumbuhan supermarket di kota-kota besar meningkat setiap tahunnya dan kompetisi pasar juga tinggi. Kita sebagai tim data diminta untuk menganalisa performa supermarket milik perusahaan. Data tersimpan dalam supermarket.RDS berisi data transaksi selama periode Januari - Maret 2019. Data bersumber dari Kaggle.

2. Read Data

Fungsi readRDS() untuk membaca file ekstensi RDS, yaitu object di R yang disimpan ke dalam sebuah file. Cara menyimpan object menjadi file RDS dengan fungsi saveRDS()

# read data
supermarket <- readRDS("data_input/Supermarket.RDS")
# melihat struktur data
str(supermarket)
#> 'data.frame':    1000 obs. of  17 variables:
#>  $ invoice_id     : chr  "750-67-8428" "226-31-3081" "631-41-3108" "123-19-1176" ...
#>  $ branch         : Factor w/ 3 levels "A","B","C": 1 3 1 1 1 3 1 3 1 2 ...
#>  $ city           : Factor w/ 3 levels "Mandalay","Naypyitaw",..: 3 2 3 3 3 2 3 2 3 1 ...
#>  $ customer_type  : Factor w/ 2 levels "Member","Normal": 1 2 2 1 2 2 1 2 1 1 ...
#>  $ gender         : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 2 1 1 1 1 ...
#>  $ product_line   : Factor w/ 6 levels "Electronic accessories",..: 4 1 5 4 6 1 1 5 4 3 ...
#>  $ unit_price     : num  74.7 15.3 46.3 58.2 86.3 ...
#>  $ quantity       : int  7 5 7 8 7 7 6 10 2 3 ...
#>  $ tax_5          : num  26.14 3.82 16.22 23.29 30.21 ...
#>  $ total          : num  549 80.2 340.5 489 634.4 ...
#>  $ date           : Date, format: "2019-01-05" "2019-03-08" ...
#>  $ purchase_hour  : num  13 10 13 20 10 18 14 11 17 13 ...
#>  $ payment        : Factor w/ 3 levels "Cash","Credit card",..: 3 1 2 3 3 3 3 3 2 2 ...
#>  $ cogs           : num  522.8 76.4 324.3 465.8 604.2 ...
#>  $ gross_marginpct: num  4.76 4.76 4.76 4.76 4.76 ...
#>  $ gross_income   : num  26.14 3.82 16.22 23.29 30.21 ...
#>  $ rating         : num  9.1 9.6 7.4 8.4 5.3 4.1 5.8 8 7.2 5.9 ...
# Inspect data
head(supermarket, 5)

Deskripsi kolom:

  • invoice_id: slip invoice id
  • branch: branch supermarket (A, B, C)
  • city: lokasi supermarket
  • customer_type: tipe pelanggan (Member/Normal)
  • gender: gender pelanggan
  • product_line: kategorisasi produk (Electronic accessories, Fashion accessories, Food and beverages, Health and beauty, Home and lifestyle, Sports and travel)
  • unit_price: harga produk dalam dollar
  • quantity: jumlah produk yang dibeli pelanggan
  • tax_5: harga pajak 5% untuk pembelian produk
  • total: harga total termasuk pajak
  • date: tanggal pembelian
  • purchase_hour: jam pembelian
  • payment: mode pembayaran (Cash, Credit card, Ewallet)
  • cogs: harga pokok penjualan (cost of goods sold)
  • gross_marginpct: persentase margin penjualan
  • gross_income: gross_income dari penjualan produk
  • rating: rating pengalaman berbelanja pelanggan (1-10)

Kita akan analisis data supermarket dengan Descriptive Statistics dan Inferential Statistics.

2 Descriptive Statistics

Descriptive Statistics membantu kita menggambarkan karakteristik dari data, sehingga berguna dalam proses Exploratory Data Analysis (EDA).

  • Ukuran pemusatan data (Measure of Central Tendency)
  • Ukuran penyebaran data (Measure of Spread)
  • Hubungan antar data (Variable Relationship)

2.1 Measure of Central Tendency

Ukuran pemusatan data adalah suatu nilai yang cukup untuk mewakili seluruh nilai pada data.

2.1.1 Mean

Cara paling umum untuk membuat perkiraan nilai tunggal dari data yang banyak adalah dengan merata-ratakannya.

  • Formula:

\[\frac{\sum{x_i}}{n}\]

  • Fungsi pada R: mean()

Contoh:

Berapa perkiraan rating untuk 1 transaksi di supermarket ini?

round(mean(supermarket$rating))
#> [1] 7
mean(supermarket$rating)
#> [1] 6.9727

Kesimpulan: Rating dari supermarket untuk masing-masing transaksi adalah 7 dari skala 1-10. Sudah bagus untuk keseluruhan transaksi (jawaban mas Vetrick).

Berapa rata-rata gross_income untuk supermarket per branch?

# gunakan aggregate
aggregate(gross_income ~ branch, supermarket, mean)

Kesimpulan: Branch C adalah branch tertinggi berdasarkan gross_income, untuk kepentingan peningkatan profit, Branch A dapat dilakukan evaluasi.

  • Sifat nilai mean: sensitif terhadap outlier

Outlier adalah nilai ekstrim yang jauh dari observasi lainnya. Nilai mean akan sangat dipengaruhi oleh kemunculan data ekstrim. Mencari nilai mean dengan data yang beroutlier mengakibatkan nilai mean menjadi tidak representatif (bias).

Contoh lain:

Ada sebuah supermarket lain di Indonesia yang merekap jumlah pengunjung bulanan. Mereka ingin menargetkan pengunjung pada bulan ke-11 dengan menggunakan data pengunjung 10 bulan terakhir.

Dengan nilai mean:

# data
pengunjung <- c(1400, 1900, 3000, 15000, 2000, 2200, 1800, 2500, 2350, 1100)

# mean
mean(pengunjung)
#> [1] 3325

Cek visualisasi terkait distribusi data menggunakan histogram (akan lebih dijelaskan pada course Data Visualization)

# hist
hist(pengunjung, breaks = 25)

Apakah nilai mean di atas dapat diandalkan? Ketika terdapat outlier, maka nilai mean kita menjadi bias dan tidak representatif

Kesimpulan:

Masalah ini dapat diatasi oleh nilai: - median - trimmed mean.

2.1.2 Median

Median atau nilai tengah diperoleh dengan mengurutkan data terlebih dahulu kemudian mencari nilai tengah dari data.

  • Baik untuk data yang memiliki outlier atau berdistribusi skewed (condong kiri/kanan)
  • Fungsi pada R: median()

Mari hitung ulang nilai pusat data pengunjung dengan median:

# mencari median secara manual
# gunakan order/sort
sort(pengunjung)
#>  [1]  1100  1400  1800  1900  2000  2200  2350  2500  3000 15000
pengunjung[order(pengunjung, decreasing = F)]
#>  [1]  1100  1400  1800  1900  2000  2200  2350  2500  3000 15000
# median
median(pengunjung)
#> [1] 2100
mean(pengunjung)
#> [1] 3325

Nilai mean pengunjung = 3325, sedangkan median pengunjung = 2100

Kesimpulan: Nilai mean dan median dari data kita cukup jauh. Ukuran pemusatan data yang cocok untuk data pengunjung adalah median.

Cek distribusi data (histogram akan dibahas lebih dalam di course Data Visualization):

# run chunk keseluruhan secara bersamaan
hist(pengunjung, breaks = 25)
abline(v = mean(pengunjung), col = "red")
abline(v = median(pengunjung), col = "blue")

Pilihan lain bila dengan menggunakan trimmed mean, yaitu rata-rata dengan terlebih dahulu memotong x persen nilai terkecil dan terbesar dari data:

Misal kita menggunakan trimmed mean 10%, artinya: data yang sudah diurutkan akan dipotong sebesar 10% di ujung kiri dan 10% di ujung kanan. Kemudian dihitung rata-ratanya.

mean(pengunjung, trim = 0.1)
#> [1] 2143.75
median(pengunjung)
#> [1] 2100
mean(pengunjung)
#> [1] 3325

Penentuan nilai % trim tidak ada aturan khusus. namun untuk mempertahankan informasi dari data, penggunaan %trim sebaiknya di bawah 20%.

Lalu bagimana dengan mean() dari categorical variables? Berapakah rata-rata jenis kelamin pelanggan supermarket?

mean(supermarket$gender)
#> [1] NA
#median(supermarket$gender)

Kesimpulan: untuk data kategorik tidak dapat menggunakan ukuran pemusatan data mean dan median.

2.1.3 Modus (Mode)

Modus berguna untuk mencari nilai yang paling sering muncul (frekuensi tertinggi).

  • Modus digunakan untuk data kategorik
  • R tidak memiliki fungsi built-in

Contoh: Tipe product_line apa yang merepresentasikan supermarket?

Dengan kata lain: untuk masing-masing product_line ada berapa transaksi yang terjadi?

Bisa menggunakan fungsi table() atau summary()

names(sort(table(supermarket$product_line), decreasing = TRUE))[1]
#> [1] "Fashion accessories"

Modus untuk product_line adalah Fashion accessories.

Karena tidak dapat fungsi built in, kita juga dapat membuat fungsi custom untuk mendapatkan nilai Modus.

# PENTING: run chunk keseluruhan secara bersamaan
most <- function(x){
  # membuat tabel frekuensi
  table_x <- table(x)
  
  # mengurutkan tabel
  sort_table_x <- sort(table_x, decreasing = TRUE)
  
  # mengambil kategori
  name <- names(sort_table_x)
  
  # mengambil kategori dengan frekuensi terbesar
  name[1]
}

Menggunakan fungsi most() :

most(supermarket$product_line)
#> [1] "Fashion accessories"

2.1.4 Knowledge Check

Dari pernyataan berikut, jawablah benar atau salah. Apabila salah, tuliskan pernyataan yang benar.

  1. Mean (tanpa trimmed) adalah pusat data yang hanya melibatkan sebagian data dalam perhitungannya.

Salah, karena untuk ukuran pemusatan data mean() menggunakan keseluruhan data. Yang menggunakan sebagian data adalah trimmed mean.

  1. Median adalah pusat data yang sensitif terhadap outlier.

Salah, karena yang diambil nilai tengah. Yang sensitif terhadap outlier adalah nilai mean.

  1. Nilai pusat data yang cocok untuk tipe data kategorik adalah modus.

Benar

2.2 Measure of Spread

Ukuran penyebaran data mewakili seberapa menyebar atau beragam data kita.

2.2.1 Variance

Variance menggambarkan seberapa beragam suatu data numerik tunggal menyebar dari pusat datanya.

  • Formula variance:

\[var = \frac{\sum(X_i - \bar{X})^2}{n-1}\]

  • Fungsi di R: var()

Contoh:

Perusahaan toko retail sedang menyeleksi daerah mana yang cocok untuk cabang baru mereka. Mereka mengumpulkan informasi tentang harga sewa bangunan di daerah A dan daerah B.

harga_A <- c(400,410,420,400,410,420,400,410,420,400,410,420,400)
harga_B <- c(130,430,650,540,460,320,380,550,650,470,330,140,270)

Setelah dibandingkan, rata-rata harga bangunan kedua daerah sama:

#rata-rata harga bangunan daerah A
mean(harga_A)
#> [1] 409.2308
#rata-rata harga bangunan daerah B
mean(harga_B)
#> [1] 409.2308

Mari bandingkan dari sisi lain, yaitu tingkat keberagaman data (variance). Daerah manakah yang harganya lebih bervariansi?

var(harga_A)
#> [1] 74.35897
var(harga_B)
#> [1] 28707.69

Apabila satuan data harga adalah rupiah, maka:

  • Satuan mean: rupiah
  • Satuan variance: rupiah^2

Insight: harga-harga di daerah A lebih stabil, harga harga bangunan di daerah B lebih bervariasi.

Karakteristik:

  • Skala variance dari 0 sampai tak hingga. Semakin besar nilainya maka artinya semakin menyebar dari pusat data (mean).

  • Variance memiliki satuan kuadrat, sehingga tidak dapat langsung diinterpretasikan. Biasanya digunakan untuk membandingkan dengan nilai var lain dengan satuan yang sama.

  • Nilai variansi sangat bergantung dengan skala data

Kasus: Di bawah ini, data mana yang lebih bervariasi?

profit_usd <- supermarket$gross_income
profit_idr <- supermarket$gross_income * 14000
# cek variance profit_usd
var(profit_usd)
#> [1] 137.0966
# cek variance profit_idr
var(profit_idr)
#> [1] 26870932452

Diskusi: Apakah bisa kita simpulkan profit_idr lebih bervariasi daripada profit_usd?

tidak bisa menyimpulkan bahwa profit_idr lebih bervariasi. Karena keduanya memiliki satuan yang berbeda.

Note: Bila terdapat data yang range atau satuannya berbeda bisa dilakukan scaling sehingga range antar data sama atau tidak jauh berbeda. Caranya bisa menggunakan min-max normalization / standarisasi menggunakan scale(). Hal ini akan lebih detail dibahas di course machine learning.

2.2.2 Standard Deviation

Standard deviation menggambarkan seberapa jauh simpangan nilai yang dianggap umum, dihitung dari titik pusat (mean) nya. Kita dapat menentukan apakah suatu nilai dikatakan menyimpang dari rata-rata namun masih dikatakan umum, atau sudah tidak umum.

Karena dihitung dengan mengakarkan variance, satuannya sudah sesuai dengan data asli dan bisa diinterpretasikan.

  • Formula standar deviasi:

\[sd = \sqrt{var}\]

  • Fungsi di R: sd()
# standar deviasi harga_A & harga_B
sd(harga_A)
#> [1] 8.623165
sd(harga_B)
#> [1] 169.4334
# tinjau nilai mean harga_A & harga_B
mean(harga_A)
#> [1] 409.2308
mean(harga_B)
#> [1] 409.2308
mean(harga_A)+sd(harga_A)
#> [1] 417.8539

Interpretasi: mean +- sd (karena satuan mean dan sd sama, yaitu jutaan rupiah)

  • Harga sewa pada daerah A umumnya jatuh pada interval 409.2308 +- 8.623165
  • Harga sewa pada daerah B umumnya jatuh pada interval 409.2308 +- 169.4334

Apabila kita ditawarkan suatu bangungan di daerah B dengan harga 800, apakah harga tersebut masih wajar? Apakah sebaiknya kita membeli bangunan tersebut? Hubungkan dengan nilai mean dan standar deviasi yang diperoleh.

menghitung range “harga normal” daerah B:

# hitung batas bawah dan atas dari harga wajar daerah B
409.2308 - 169.4334
#> [1] 239.7974
409.2308 + 169.4334
#> [1] 578.6642

Kesimpulan: Harga tersebut terlalu jauh dari harga normalnya, sehingga harga tersebut dikategorikan sebagai harga tidak wajar. Dan sebaiknya tidak perlu membelinya.

DIVE DEEPER: Diskusi

  1. Standar deviasi umum digunakan untuk mengukur volatilitas (fluktuasi) nilai saham. Dikumpulkan harga saham_A dan saham_B selama 20 periode terakhir.
saham_A <- c(1000,1200,1150,1000,950,900,1200,1300,1400,1450,1500,1600,1400,1250,1400,1600,1700,1300,1400,1300)
saham_B <- c(1300,1350,1320,1310,1280,1230,1250,1260,1280,1300,1320,1340,1300,1270,1280,1300,1320,1400,1300,1290)

Rany adalah seorang investor pemula. Bantulah Rany untuk menentukan saham mana yang lebih baik dipilih untuk investasi! Gunakan nilai mean dan standar deviasi.

Berapa rata-rata harga tiap saham?

mean(saham_A)
#> [1] 1300
mean(saham_B)
#> [1] 1300

Berapa standar deviasi harga tiap saham?

sd(saham_A)
#> [1] 223.6068
sd(saham_B)
#> [1] 37.41657

Saham mana yang memiliki volatilitas lebih tinggi?

Saham A, karena standar deviasinya lebih tinggi

Note: Volatilitas menunjukkan seberapa fluktuatif (naik/turunnya) sebuah nilai saham

Kesimpulan: rany itu adalah risk taker ambil saham A, akan tetapi apabila rany adalah risk avoider, ambil saham B.

  1. Untuk masing-masing kasus di bawah, tentukan bagaimana kondisi ideal untuk nilai mean dan variancenya (tinggi/rendah):

a. Saya sebagai investor pemula tidak memiliki modal yang banyak untuk membeli saham dan ingin memilih saham dengan resiko rendah. Bagaimana keadaan harga saham yang saya harapkan?

  • Mean: (rendah)
  • Variansi: (rendah)

b. Saya sebagai tim marketing di suatu supermarket tentunya ingin memperoleh profit semaksimal mungkin. Bagaimana keadaan profit yang saya harapkan?

  • Mean: (tinggi)
  • Variansi: (rendah)

c. Saya sebagai student di Algoritma yang akan mengerjakan quiz untuk keseluruhan course. Bagaimana keadaan score quiz yang saya harapkan?

  • Mean: (tinggi)
  • Variansi: (rendah)

2.2.3 Range and IQR (Five Number Summary)

Five number summary (ringkasan lima angka) adalah satu set statistika deskriptif numerik yang terdiri dari lima angka:

  • Minimum: nilai terkecil
  • Kuartil 1 (Q1): nilai ke 25%
  • Kuartil 2 (Q2 atau median): nilai ke 50% (nilai tengah)
  • Kuartil 3 (Q3): nilai ke 75%
  • Maksimum: nilai terbesar

Gunakan fungsi summary() untuk merangkum nilai sebaran data tersebut.

Contoh:

Deskripsikan distribusi gross_income dari data supermarket

summary_supermarket <- summary(supermarket$gross_income)

#jawaban mas Rangga (menggunakan indexing)
summary_supermarket[6] - summary_supermarket[1]
#>    Max. 
#> 49.1415

Dari summary tersebut, kita bisa mengetahui nilai sebaran:

  • Range: selisih antara nilai maksimum dan minimum
#range
range(supermarket$gross_income)
#> [1]  0.5085 49.6500
#menggunakan fungsi min dan max
max(supermarket$gross_income) - min(supermarket$gross_income)
#> [1] 49.1415

Range dari gross_income adalah 49.1415

  • Interquartile Range (IQR): selisih antara Q3 (data ke 75%) dan Q1 (data ke 25%)
#IQR
IQR(supermarket$gross_income)
#> [1] 16.52037

IQR dari gross income adalah 16.52037

2.2.4 Boxplot

Distribusi data numerik pada umumnya divisualisasikan dengan boxplot, yang meliputi komponen:

  • Box: menggambarkan Q1, Q2 (median), dan Q3
  • Whisker: pagar bawah dan atas (PENTING: hati-hati, nilai ini bukan nilai minimum dan maksimum data)
  • Data outliers: nilai ekstrim data yang berada di luar pagar bawah dan atas (bisa termasuk min & max).

Beberapa hal yang harus diperhatikan dalam boxplot:

  • Banyaknya data dari Q1 ke nilai minimum (bukan pagar bawah) adalah 25%
  • Banyaknya data dari Q1 ke Q2 adalah 25%
  • Banyaknya data dari Q2 ke Q3 adalah 25%
  • Banyaknya data dari Q1 ke Q3 (IQR) adalah 50%
  • Banyaknya data dari Q3 ke nilai maksimum (bukan pagar atas) adalah 25%

Insight yang dapat diperoleh dari boxplot:

  1. Pusat data dengan median (Q2)
  2. Sebaran data dengan IQR (lebar kotak)
  3. Outlier, nilai ekstrim pada data
  4. Bentuk distribusi data:
  • box yang berada ditengah = distribusi normal (memadat di tengah)
  • box yang mendekati daerah kiri/kanan (bawah/atas) = distribusi skewed
  • bila median mendekati Q1 maka nilai pada data cenderung rendah.

Contoh:

Visualisasikan sebaran data gross_income dari data supermarket dengan boxplot()! Analisis informasi yang didapatkan.

boxplot(supermarket$gross_income, horizontal = T)

  • Apakah data memiliki outlier?

(Ya)

  • Central tendency mana yang cocok dipakai untuk data ini?

(Median) -> karena data memiliki outlier

  • Bagaimana bentuk distribusi data?

Distribusi (skewed) - > right skewed , karena banyak data/observasi yang jatuh di nilai-nilai kecil.

Contoh lain:

Analisis sebaran data gross_income di tiap purchase_hour berikut. Distribusi data yang paling diharapkan jatuh pada jam berapa?

boxplot(formula = gross_income ~ purchase_hour, data = supermarket)

Insight:

  • Menggunakan median, distribusi yang diharapkan adalah pada jam 14 dan 19
  • Menggunakan IQR, sebaran data yang paling besar adalah pada jam 11
  • Analisa purchase_hour dengan produk unggulan. Pada jam berapa produk unggulan sebaiknya tidak dijual 18

2.2.5 Knowledge Check

Dari pernyataan berikut, jawablah benar atau salah. Apabila salah, tuliskan pernyataan yang benar.

  1. Variance dan standard deviation keduanya merupakan nilai persebaran data yang bisa langsung diinterpretasi.

Salah, yang bisa di interpretasikan langsung adalah standar deviasi

  1. Visualisasi boxplot bertujuan salah satunya untuk mendeteksi outlier.

Benar

  1. Kita tidak bisa mengetahui nilai mean dan juga sum dari sebuah data numerik melalui visualisasi boxplot.

Benar

2.3 Variable Relationship

Ukuran yang digunakan untuk melihat hubungan linear antara dua variabel numerik.

2.3.1 Covariance

Covariance menunjukkan bagaimana variansi 2 data (variable yang berbeda) bergerak bersamaan.

  • Formula Covariance:

\[Cov(X, Y) = \frac{1}{n-1}\sum\limits^n_{i=1}(X_i - \mu_X)(Y_i - \mu_Y)\]

  • Fungsi di R: cov()

  • Nilai covariance positif mengindikasikan pergerakan nilai yang searah / berbanding lurus.
  • Nilai covariance negatif mengindikasikan pergerakan nilai yang berbalik arah.

Contoh:

Hitunglah covariance antara saham_A dan saham_B! Bagaimana hubungannya?

#cov
cov(saham_A, saham_B)
#> [1] 2657.895

Interpretasi nilai: Nilai covariance menunjukkan hubungan yang positif

  • Ketika nilai saham A naik, nilai saham B naik
  • Ketika nilai saham A turun, nilai saham B turun

Kelemahan: Seperti variance, covariance tidak memiliki batasan nilai untuk mengukur kekuatan hubungan antar dua variabel (-inf s.d inf), sehingga kita hanya bisa mengetahui apakah hubungannya positif atau negatif. Oleh karena itu, hadir correlation.

2.3.2 Correlation

Correlation memampatkan nilai covariance yang dari -inf s.d inf menjadi -1 s.d 1 sehingga bisa diukur kekuatan hubungan antar data (variable).

  • Formula Correlation:

\[Cor(X,Y) = \frac{Cov(X,Y)}{\sqrt{Var(X)Var(Y)}}\]

  • Fungsi di R: cor()

  • Nilai korelasi mengindikasikan kekuatan hubungan antara dua variable numerik sebagai berikut:

Bila korelasi dua variable numerik mendekati: * -1 artinya korelasi negatif kuat * 0 artinya tidak berkorelasi * 1 artinya korelasi positif kuat

Contoh:

Adakah korelasi antara saham_A dan saham_B, bagaimana hubungan dan kekuatannya?

#cor
cor(saham_A, saham_B)
#> [1] 0.3176792

Jawaban: Nilai korelasinya cenderung kecil / kekuatan korelasi = weak correlation (hubungan korelasi yang lemah)

Visualisasi korelasi dengan scatter plot:

# scatter plot
# run seluruh code bersamaan
plot(saham_A, saham_B)
abline(lm(saham_B ~ saham_A), # garis linear `lm` akan dibahas di Machine Learning
       col = 'red') # warna garis

Ilustrasi correlation:

————-END OF DAY 1—————–

————-START OF DAY 2—————

Dive Deeper!

Rany adalah seorang investor dan memiliki modal untuk membeli dua saham sekaligus. Rany telah mengumpulkan data historis 5 saham potensial dan melihat pergerakannya:

Melihat matriks korelasi antar saham dengan fungsi cor()

# buat matriks korelasi data
cor(saham)
#>            saham_A     saham_B      saham_C      saham_D    saham_E
#> saham_A  1.0000000  0.31767918 -0.202135392  0.434056705  1.0000000
#> saham_B  0.3176792  1.00000000  0.014539664 -0.112781955  0.3176792
#> saham_C -0.2021354  0.01453966  1.000000000 -0.005651362 -0.2021354
#> saham_D  0.4340567 -0.11278195 -0.005651362  1.000000000  0.4340567
#> saham_E  1.0000000  0.31767918 -0.202135392  0.434056705  1.0000000

Visualisasi korelasi dapat menggunakan fungsi ggcorr() (visualisasi heatmap) dari package GGally:

# install package di console:
# install.packages("GGally")

# load library:
library(GGally)

# visualisasi:
ggcorr(saham, label = T)

Diskusi: 1. Berdasarkan korelasi di atas, saham dengan karakteristik apa yang harus Rany beli?

Korelasi antar saham: untuk nilai korelasi yang tinggi (antara saham A dan saham E), dibeli apabila rany memiliki profil resiko pemberani (risk taker) -> Pak Purwanto dan Mas Peter Beli saham yang tidak memiliki korelasi (antara saham B dan saham C), untuk menghindari resiko.

Saham memiliki variansi: ketika rany risk taker -> ambil nilai variansi antar saham yang tinggi, ketika rany risk avoider -> ambil nilai variansi antar saham yang rendah

  1. Berdasarkan korelasi di atas, dua saham mana yang akan Rany beli sekaligus?

A-E (untuk profil rany risk taker), namun untuk gabungan saham lainnya (dibeli untuk profil yang risk avoider).

2.3.3 (Additional) Correlation != Causation

Jika kedua variabel berkorelasi, belum tentu kedua variabel tersebut menunjukkan hubungan sebab akibat.

Pada contoh sebelumnya, saham_A dan saham_E memiliki perfect positive correlation. Namun belum tentu saham_A yang mengakibatkan naik atau turunnya harga saham_E, maupun sebaliknya. Kedua variabel memiliki korelasi kuat namun belum tentu menunjukkan hubungan sebab akibat.

Contoh lainnya yang menarik: https://www.tylervigen.com/spurious-correlations

2.3.4 Knowledge Check

Dari pernyataan berikut, jawablah benar atau salah. Apabila salah, tuliskan pernyataan yang benar.

  1. Nilai correlation dihitung dari nilai covariance, keduanya untuk menunjukkan hubungan antar dua variabel numerik.

Benar

  1. Ketika korelasi variabel A dan B bernilai -1 artinya ketika nilai A naik, nilai B turun.

Benar

  1. Scatter plot dapat digunakan untuk menggambarkan hubungan antara dua variabel numerik.

Benar, scatter plot hanya dapat digunakan untuk menggambarkan 2 variabel dengan tipe data numerik.

3 Inferential Statistics

Inferential Statistics membantu kita menarik kesimpulan tentang keseluruhan data (populasi) dengan menggunakan sebagian informasinya saja (sampel). Aplikasi inferensial statistik misalnya pada prediksi hasil pemilu dengan quick count.

Setiap data memiliki distribusi. Distribusi data yang spesial dan berperan dalam inferential statistics adalah distribusi normal.

3.1 Normal Distribution

Karakteristik:

  • Kurva berbentuk lonceng simetris, artinya puncaknya adalah titik pusat (mean = median)
  • Luas area di bawah kurva = 1 (menyatakan probabilitas)
  • Persebaran data:
    • 68% data berada di rentang +- 1 standar deviasi dari mean
    • 95% data berada di rentang +- 2 standar deviasi dari mean
    • 99.7% data berada di rentang +- 3 standar deviasi dari mean
  • Standar normal baku adalah distribusi normal dimana mean = 0 dan standar deviasi = 1.

Distribusi normal banyak digunakan pada inferensial statistik karena dicetuskannya Central Limit Theorem.

Semakin bertambahnya jumlah sampel yang diambil secara acak (random), maka distribusi rata-rata sampel akan mengikuti distribusi normal.

Kunjungi link berikut untuk mengerti lebih dalam terkait Central Limit Theorem melalui animasi: https://seeing-theory.brown.edu/probability-distributions/index.html

Karakteristik distribusi normal inilah yang dimanfaatkan untuk penghitungan inferensial statistik:

  • Menghitung Probabilitas:
    • Probability Mass Function -> diskrit/kategorik
    • Probability Density Function -> kontinu/numerik
  • Membuat Confidence Interval
  • Uji Hipotesis

3.2 Probability Mass Function

  • Menghitung peluang untuk data diskrit, contoh:
    • peluang hujan/tidak hujan
    • peluang produk yang terjual
  • Formula: jumlah kejadian terjadi dibagi dengan jumlah kejadian total

Contoh:

Dari data supermarket, berapa peluang (proporsi) pelanggan membeli produk dari product_line Health and Beauty?

hint: gunakan fungsi table()/ fungsi prop.table() * table() membuat tabel frekuensi (count) * prop.table() membuat tabel proporsi dari tabel frekuensi

table(supermarket$product_line)
#> 
#> Electronic accessories    Fashion accessories     Food and beverages 
#>                    170                    178                    174 
#>      Health and beauty     Home and lifestyle      Sports and travel 
#>                    152                    160                    166
nrow(supermarket)
#> [1] 1000
# cara lain menggunakan prop.table
prop.table(table(supermarket$product_line))
#> 
#> Electronic accessories    Fashion accessories     Food and beverages 
#>                  0.170                  0.178                  0.174 
#>      Health and beauty     Home and lifestyle      Sports and travel 
#>                  0.152                  0.160                  0.166
  • Peluang pelanggan membeli product_line Health and Beauty adalah sebesar 152/1000 = 0.152.
  • Bahwa dari nilai proporsi, masing-masing product_line hampir seluruhnya memiliki peluang yang sama untuk dibeli oleh pelanggan.

3.3 Probability Density Function

  • Menghitung probability data kontinu, contohnya:

    • tinggi badan
    • curah hujan
    • pendapatan/keuntungan
  • Memanfaatkan distribusi normal (standar normal baku)

  • Tahapan:

    1. Hitung Z-score (ubah nilai data asli ke standar normal baku = Z-score standardization)
    2. hitung peluang (area di bawah kurva) berdasarkan Z-score
  • Formula Z-score:

\[Z = \frac{x-\mu}{\sigma}\]

Keterangan:

  • Z = Z-score
  • x = titik data
  • \(\mu\) = mean
  • \(\sigma\) = standar deviasi

Z-score merupakan sebuah nilai yang merepresentasikan berapa standard deviasi data tersebut menyimpang dari rata-ratanya

Contoh

Tinggi badan pria dewasa di Indonesia berdistribusi normal dengan rata-rata 165 cm dan standar deviasi 10 cm. Berapa peluang pria dewasa di Indonesia memiliki tinggi badan > 180 cm?

Diketahui:

  • mean = 165
  • standar deviasi = 10
  • titik data = 180
# cara 1: hitung Z-score lalu ubah jadi peluang
Z <- (180-165)/10
Z
#> [1] 1.5
pnorm(Z, lower.tail = F)
#> [1] 0.0668072
# cara 2: langsung dengan fungsi pnorm
pnorm(180, mean = 165, sd = 10, lower.tail = F)
#> [1] 0.0668072

Note: * lower.tail = F -> mencari peluang yang lebih tinggi dari titik data * lower.tail = T -> mencari peluang yang lebih rendah dari titik data

Jawaban: Peluang pria dewasa di Indonesia memiliki tinggi badan > 180 cm adalah 0.0668

DIVE DEEPER

Mari gunakan data supermarket yang kita punya.

  1. Setelah 3 bulan beroperasi, ingin dimanfaatkan data historis untuk keperluan budget planning. Perusahaan berniat untuk memperkirakan kemungkinan keluarnya nilai Harga Pokok Penjualan (HPP) cogs tertentu.

Jawablah pertanyaan berikut apabila diasumsikan cogs berdistribusi secara normal:

  • Berapa peluang nilai cogs kurang dari 100?

Langkah:

  1. Hitung mean dan sd cogs
  2. Hitung Z-score
  3. Ubah Z-score menjadi peluang
# hitung mean
mean_cogs <- mean(supermarket$cogs)
mean_cogs
#> [1] 307.5874
# hitung standar deviasi
sd_cogs <- sd(supermarket$cogs)
sd_cogs
#> [1] 234.1765
# hitung peluang cogs < 100
pnorm(100, mean_cogs, sd_cogs, lower.tail = T)
#> [1] 0.1876857

Jawaban: Peluang produk dengan HPP lebih kecil 100 adalah 0.1876857

  • Berapa peluang nilai cogs di antara 150-500?
# hitung peluang untuk batas atas dan batas bawah
#mas peter
p_score_max_peter <- pnorm(q = 500, mean_cogs, sd_cogs, lower.tail = F)

#pak purwanto
p_score_max <- pnorm(q = 500, mean_cogs, sd_cogs, lower.tail = T)

# hitung z-score batas bawah
p_score_min <- pnorm(q = 150, mean_cogs, sd_cogs, lower.tail = T)
  
# hitung peluang
p_score_max - p_score_min
#> [1] 0.5438719

Kesimpulannya: Peluang produk dengan HPP di antara 150-500 adalah 0.5438719

3.4 Confidence Interval (CI)

Confidence interval (selang kepercayaan) berguna untuk menduga nilai mean populasi dengan sebuah interval. Menebak dengan sebuah interval akan meminimalisir error dibandingkan hanya dengan menebak satu nilai.

  • Formula:

\[CI = \bar{x} \pm Z_{\frac{\alpha}{2}}*SE\]

  • Keterangan:
    • \(\bar{x}\) = rata-rata sampel
    • \(Z_{\frac{\alpha}{2}}\) = Z-score ketika alpha/2
    • \(\alpha\) = tingkat error yang ditolerasi
    • tingkat kepercayaan = 1-\(\alpha\)
    • SE = standard error

SE mengukur kebaikan sampel dalam mewakilkan populasi. Semakin kecil, maka sampel semakin representatif (baik).

\[SE = \frac{\sigma}{\sqrt n}\]

  • Ket:
    • \(\sigma\) = standar deviasi populasi
    • \(n\) = jumlah sampel
  • Tahapan:
    1. Hitung nilai mean sampel dan standar deviasi populasi
    2. Hitung standar error (SE)
    3. Tentukan tingkat kepercayaan dan \(\alpha\) (biasanya \(\alpha\) = 5%)
    4. Tentukan nilai \(Z_{\frac{\alpha}{2}}\)
    5. Hitung confidence interval

Contoh:

Tomy seorang pemilik supermarket memiliki ratusan cabang di Indonesia. Ia ingin menetapkan target profit bulanan dengan mengambil data dari 25 cabang yang standar deviasi populasinya sebesar 350. Ternyata didapatkan rata-rata sampel profit sebesar 5000. Asumsi berdistribusi normal.

Berapakah confidence interval untuk rata-rata profit seluruh cabang? Gunakan tingkat kepercayaan 95%

  1. Diketahui:
  • mean sampel = 5000
  • standar deviasi populasi = 350
  • jumlah sampel (n) = 25
  1. Hitung nilai SE
# stdev populasi dibagi akar n
SE <- 350/sqrt(25)
SE
#> [1] 70
  1. Tentukan tingkat kepercayaan dan alpha
  • Tingkat kepercayaan = 0.95
  • alpha (tingkat error) = 1-0.95 = 0.05
alpha <- 0.05
alpha
#> [1] 0.05
  1. Hitung Z alpha/2

alpha dibagi 2 karena ingin membuat batas bawah dan batas atas (dalam dunia statistika dikenal sebagai two-tailed)

Z <- 0.025
qnorm(Z)
#> [1] -1.959964

Notes:

  • pnorm() untuk mencari peluang (p) dari sebuah titik di normal baku (q)
  • qnorm() untuk mencari titik di normal baku (q) dari sebuah peluang (p)
  1. Hitung confidence interval
# batas bawah
batas_bawah <- 5000-(-1.959964*SE)
batas_bawah  
#> [1] 5137.197
# batas atas
batas_atas <- 5000+(-1.959964*SE)
batas_atas
#> [1] 4862.803

Kesimpulan: dengan tingkat keyakinan 95%, maka interval rata-rata profit yang dijadikan target untuk setiap cabang adalah 4862 - 5137. . ## Hypothesis Testing

Uji hipotesis bertujuan untuk menguji dugaan. Uji hipotesis sering disebut juga sebagai uji signifikansi yang digunakan untuk menguji apakah suatu treatment memberikan perubahan/pengaruh signifikan terhadap suatu kondisi.

Istilah-istilah:

  • Hipotesis: dugaan sementara terhadap populasi yang harus diuji kebenarannya
  • \(H_0\) / hipotesis nul: dugaan awal sebelum dilakukan pengujian, selalu memiliki unsur tanda kesamaan (=, >=, <=)
  • \(H_1\) / hipotesis alternatif: dugaan yang berlawan dari \(H_0\)
  • \(\alpha\): tingkat signifikansi yaitu tingkat kesalahan yang masih bisa ditoleransi
  • \(1-\alpha\): tingkat kepercayaan (confidence level)
  • \(p-value\): hasil perhitungan statistik yang menunjukkan peluang data sampel terjadi dengan kondisi H0.

Pengambilan kesimpulan:

  • Jika \(p-value\) < \(\alpha\), maka tolak \(H_0\)
  • Jika \(p-value\) > \(\alpha\), maka gagal tolak \(H_0\)

Contoh hipotesis:

  1. Hipotesis dua arah (!=)
  • \(H_0\): Pemakaian masker tidak memberikan pengaruh pada laju penyebaran virus corona (=)
  • \(H_1\): Pemakaian masker memberikan pengaruh pada laju penyebaran virus corona (!=)
  1. Hipotesis satu arah (<)
  • \(H_0\): Penambahan kasir tidak memberikan perbedaan durasi pembayaran (>=)
  • \(H_1\): Penambahan kasir menurunkan durasi pembayaran (<)
  1. Hipotesis satu arah (>)
  • \(H_0\): Penerapan diskon tidak memberikan perbedaan jumlah pembelian produk (<=)
  • \(H_1\): Penerapan diskon meningkatkan jumlah pembelian produk (>)

3.4.1 Z-test

Uji hipotesis yang menggunakan Z-test bila:

  • standar deviasi populasi diketahui
  • jumlah sampel banyak (n > 30)

KASUS 1

Lozy merupakan sebuah bisnis online yang bergerak di bidang fashion. Bila diketahui rata-rata likes dari suatu post di platform mereka sebesar 14000 likes dengan standar deviasi 5000 likes.

Demi meningkatkan likes dari tiap post, Lozy memutuskan untuk menggunakan influencer sebagai model pemasaran produk. Setelah menggunakan influencer, diambil 50 postingan acak yang ternyata memiliki rata-rata likes 15500.

Sebagai tim marketing, analisis apakah influencer tersebut meningkatkan customer engagement (dari segi rata-rata likes) secara signifikan, atau tidak? Gunakan tingkat kepercayaan 95%.

alpha ->

Jawaban:

I. Tentukan hipotesis

  • \(H_0\): rata-rata likes = 14000 (Penggunaan influencer tidak memberikan peningkatan terhadap rata-rata likes)
  • \(H_1\): rata-rata likes > 14000 (Penggunaan influencer memberikan peningkatan terhadap rata-rata likes)

II. Hitung nilai statistik

Diketahui nilai deskriptif statistika:

  • mean populasi = 14000
  • standard deviasi populasi = 5000
  • n = 50
  • mean sampel = 15500

Ditentukan oleh penguji:

  • tingkat kepercayaan = 0.95
  • alpha = 0.05

\[Z = \frac{\bar X-\mu}{SE}\]

\[SE = \frac{\sigma}{\sqrt n}\]

Z = (rata2 sampel - rata2 populasi) / standar error Standar error = standar deviasi populasi / akar dari banyak sampel

# z-hitung
SE_lozzy <- 5000/sqrt(50)
Z_lozzy <- (15500-14000)/SE_lozzy
Z_lozzy
#> [1] 2.12132
# p-value 
p_value <- pnorm(Z_lozzy, lower.tail = F)
p_value
#> [1] 0.01694743

III. Bandingkan P-value dengan alpha

Pengambilan kesimpulan:

  • Jika \(p-value\) < \(\alpha\), maka tolak \(H_0\)
  • Jika \(p-value\) > \(\alpha\), maka gagal tolak \(H_0\)

p-value 0.01694743 alpha 0.05 maka TOLAK H0

IV. Kesimpulan

Dengan menggunakan tingkat keyakinan 95%, penggunaan jasa influencer memberikan peningkatan terhadap rata-rata likes.

KASUS 2

Sebuah pabrik susu bubuk melakukan pengecekan terhadap berat produk mereka. Sebelumnya diketahui bahwa rata-rata berat bersih susu adalah 1000 gram (tertera pada label produk) dan standar deviasi sebesar 30 gram.

Diambil sampel sebanyak 100 kaleng dari yang beredar di pasaran dan diperoleh rata-rata berat bersih sebesar 995 gram.

Apakah benar bahwa berat bersih susu bubuk sudah sesuai dengan kriteria? Ujilah dengan tingkat signifikansi 5%.

Jawab:

I. Tentukan hipotesis

  • \(H_0\): rata-rata berat bersih susu = 1000 gram
  • \(H_1\): rata-rata berat bersih susu != 1000 gram

II. Hitung nilai statistik

Diketahui:

  • mean populasi = 1000
  • stdev populasi = 30
  • n = 100
  • mean sampel = 995
  • alpha: 0.05
# cari Z-hitung
SE_susu <- 30/sqrt(100)
SE_susu
#> [1] 3
Z_susu <- (995-1000)/SE_susu
Z_susu
#> [1] -1.666667
# cari P-value
pnorm(Z_susu, lower.tail = T)
#> [1] 0.04779035

III. Bandingkan P-value dengan alpha

Uji dua arah, sehingga alpha dibagi dua menjadi 0.025

p-value 0.0477 > alpha (0.025)

IV. Kesimpulan

Dengan menggunakan tingkat keyakinan 95%, maka H0 gagal tolak sehingga berat bersih susu adalah 1000 gr atau sudah sesuai dengan kriteria.

3.4.2 t-test

Uji hipotesis yang menggunakan t-test bila:

  • standar deviasi populasi tidak diketahui
  • jumlah sampel sedikit (n <= 30)

Bentuk t-distribution mirip dengan normal distribution, hanya saja lebih landai ketika jumlah sampel sedikit:

Contoh:

Quicker merupakan startup yang bertugas untuk membantu para startup lain mendapatkan dana hibah dari pemerintah. Umumnya, lama proses penyerahan berkas hingga dana dicairkan adalah 215 hari.

Dikumpulkan data durasi proses pencairan dana dari 10 perusahaan startup yang menggunakan jasa Quicker sebagai berikut:

duration <- c(201, 200, 215, 212, 246, 220, 205, 195, 190, 200)

Apakah Quicker bisa secara signifikan mempercepat durasi pencairan dana hibah Gunakan tingkat kepercayaan 97%.

Jawab:

I. Tentukan hipotesis

  • \(H_0\): mean durasi pencairan dana >= 215 hari (Quicker tidak memberikan efek pada durasi pencairan dana)
  • \(H_1\): mean durasi pencairan dana < 215 hari (Quicker mempercepat durasi pencairan dana)

II. Hitung P-value dengan t.test()

# t.test(data_sampel, mu = mean, alternative = arah_pengujian_di_H1)
t.test(duration, mu = 215, alternative = "less")
#> 
#>  One Sample t-test
#> 
#> data:  duration
#> t = -1.297, df = 9, p-value = 0.1134
#> alternative hypothesis: true mean is less than 215
#> 95 percent confidence interval:
#>      -Inf 217.7279
#> sample estimates:
#> mean of x 
#>     208.4

III. Bandingkan P-value dengan alpha

p-value (0.1134) > alpha (0.03), maka H0 gagal ditolak.

IV. Kesimpulan

Dengan menggunakan tingkat kepercayaan 95% dapat disimpulkan bahwa Quicker tidak mempercepat durasi pencairan hibah.